cmake_minimum_required(VERSION 3.8)
project(btree_example)

# 设置默认构建类型
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

# 保留你的BehaviorTree.CPP特定路径
set(BT_ROOT "/home/jihong/Workspace/BehaviorTree.CPP")
set(BT_BUILD_DIR "${BT_ROOT}/build")

# 查找ROS 2依赖包
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

# 添加包含目录（保留你的BT路径）
include_directories(
  include
  "${BT_ROOT}/include"  # BT头文件目录
)

# 仅匹配项目源码（避免递归匹配冗余文件）
file(GLOB LOCAL_SOURCES
  "src/*.cpp"           # 匹配当前src目录下的cpp文件
  "src/*.cc"
)

# 链接BT库目录
link_directories("${BT_BUILD_DIR}")

# 生成可执行文件
add_executable(ros2_cpp_node ${LOCAL_SOURCES})

# 设置C++标准（BT需要C++17）
target_compile_features(ros2_cpp_node PUBLIC cxx_std_17)

# 添加ROS依赖
ament_target_dependencies(ros2_cpp_node
  rclcpp
  std_msgs
)

# 手动链接BT库（关键修改：明确链接BT库文件）
target_link_libraries(ros2_cpp_node
  behaviortree_cpp  # 链接BT的共享库
)

# 安装可执行文件
install(TARGETS ros2_cpp_node
  DESTINATION lib/${PROJECT_NAME}
)

# 安装头文件
install(DIRECTORY include/
  DESTINATION include
)

# 安装行为树XML（按你的目录结构调整路径）
install(DIRECTORY config/
  DESTINATION share/${PROJECT_NAME}/config  # 安装到 install/功能包名/share/功能包名/config/
  FILES_MATCHING PATTERN "*.xml"           # 只安装 .xml 类型文件（避免意外安装其他文件）
)

# 导出依赖
ament_export_dependencies(rclcpp std_msgs)

ament_package()
